#include <gtkmm/main.h>
#include <gtkmm/builder.h>

#include "VentanaPrincipal.h"
#include "DialogListado.h"
#include "DialogUsuarios.h"
#include "DialogEstaticos.h"
#include "DialogDinamicos.h"
#include "DialogPaginasErrores.h"
#include "DialogAbout.h"
#include "ConfigBasica.h"
#include "ReporteLogs.h"
#include "DialogAbrirXML.h"
#include "DialogGuardarXML.h"
#include "Configuraciones.h"
#include "NuevoProceso.h"
#include "DetenerProceso.h"
#include "ReiniciarProceso.h"



int main(int argc, char* argv[]){

	// Recupera los parametros que se la pasan al programa
	Gtk::Main kit(argc, argv);

	// Crea la aplicacion a partir de un archivo de Glade
	Glib::RefPtr<Gtk::Builder> b = Gtk::Builder::create_from_file("MenuFinal.glade");

	// La ventana principal
	VentanaPrincipal mainWin(b, "cmdSalir");

	// Para guardar todas las configuraciones del programa
	Configuraciones* configs = NULL;

	// Abrir y guardar el archivo de configuracion
	DialogAbrirXML dialogAbrir(b, "cmdAbrir", &configs, mainWin.getMainWindow());
	DialogGuardarXML dialogGuardar(b, "cmdGuardar", &configs, mainWin.getMainWindow());

	// Las ventanas de dialogo, las crea y conecta al menú
	DialogAbout dialogAbout(b, "DialogAbout", "cmdAbout", mainWin.getMainWindow());
	ConfigBasica conf(b, "DialogConfigBasica", "cmdConfigBasica", mainWin.getMainWindow());
	conf.setDataSource(&configs);

	// Dialogos de listado, los crea y conecta al menú
	DialogUsuarios dUsuarios(b, "cmdUsuarios", &configs,  mainWin.getMainWindow());
	DialogEstaticos dStatic(b, "cmdTiposEstaticos", &configs, mainWin.getMainWindow());
	DialogDinamicos dDinamic(b, "cmdTiposDinamicos", &configs, mainWin.getMainWindow());
	DialogPaginasErrores dPagsErrores(b, "cmdPagsErrores", &configs, mainWin.getMainWindow());

	// Los logs de errores, los crea y conecta al menú
	ReporteLogs logAccesos(b, "cmdAccesos", "accesos.log");
	ReporteLogs logErrores(b, "cmdErrores", "errores.log");
	ReporteLogs logAyuda(b, "cmdAyuda", "help.txt");

	// Asocia los menues de control del servidor
	NuevoProceso np(b, "cmdIniciar", "tptallerserver");
	DetenerProceso dp(b, "cmdDetener", &configs);
	ReiniciarProceso rp(b, "cmdReiniciar", &configs, "tptallerserver");

	// El main loop
	Gtk::Main::run(mainWin.getMainWindow());

	// Si existen configuraciones las destruye
	if (configs != NULL) delete configs;

	// Termina el "main loop" termina el programa
	return EXIT_SUCCESS;
}

